'use client'
import React, { createContext, useState, useEffect } from 'react';
import { useRouter } from 'next/navigation';
import { post } from '../utils/axios';
import { get } from '../utils/axios';

// 为Context提供默认值，确保即使没有Provider也不会导致解构错误
const defaultAuthValue = {
  user: null,
  isAuthenticated: false,
  isLoading: true,
  login: async () => ({ success: false, message: 'AuthProvider未正确配置' }),
  logout: () => {}
};

const AuthContext = createContext(defaultAuthValue);

/**
 * 认证提供者组件，负责管理用户认证状态
 */
export const AuthProvider = ({ children }) => {
  const [user, setUser] = useState(null);
  const [isLoading, setIsLoading] = useState(true);
  const router = useRouter();

  /**
   * 初始化时从localStorage加载用户信息并验证
   */
  useEffect(() => {
    const initializeAuth = async () => {
      try {
        console.log('[AuthContext] 初始化认证状态');
        
        // 1. 首先从localStorage获取用户信息和token
        const storedUser = localStorage.getItem('user');
        const storedToken = localStorage.getItem('token');
        
        console.log('[AuthContext] localStorage中的用户数据:', storedUser);
        console.log('[AuthContext] localStorage中的token:', storedToken ? '存在' : '不存在');
        
        // 2. 如果有用户数据和token，尝试验证token是否有效
        if (storedUser && storedToken) {
          try {
            const parsedUser = JSON.parse(storedUser);
            console.log('[AuthContext] 解析后的用户数据:', parsedUser);
            
            // 3. 验证token是否有效（可选：向服务器发送验证请求）
            try {
              // 这里可以根据需要添加token验证逻辑
              // await verifyToken(storedToken);
              
              // 验证通过，设置用户状态
              setUser(parsedUser);
              console.log('[AuthContext] 用户状态设置成功');
            } catch (tokenError) {
              console.error('[AuthContext] Token验证失败:', tokenError);
              // Token无效，清除存储并设置用户为null
              localStorage.removeItem('user');
              localStorage.removeItem('token');
              setUser(null);
            }
          } catch (parseError) {
            console.error('[AuthContext] 解析用户数据失败:', parseError);
            // 解析错误，清除无效数据
            localStorage.removeItem('user');
            setUser(null);
          }
        } else {
          console.log('[AuthContext] localStorage中没有有效的用户数据或token');
          setUser(null);
        }
      } catch (error) {
        console.error('[AuthContext] 初始化认证状态失败:', error);
        setUser(null);
      } finally {
        // 无论如何，初始化完成后设置isLoading为false
        setIsLoading(false);
      }
    };

    initializeAuth();
  }, []);

  /**
   * 登录方法
   * @param {string} email - 用户邮箱/账户名
   * @param {string} password - 用户密码
   * @returns {Promise<{success: boolean, data?: object, message?: string}>} 登录结果
   */
  const login = async (email, password) => {
    try {
      // 调用登录接口
      const response = await post('/api/user/login', {
        account: email,
        password,
      });

      // 登录成功，保存用户信息和token
      if (response && response.data && response.data.user) {
        console.log('[AuthContext] 登录成功，用户数据:', response.data.user);
        
        // 设置用户状态
        setUser(response.data.user);
        
        // 保存到localStorage
        localStorage.setItem('user', JSON.stringify(response.data.user));
        
        // 保存token
        if (response.data.token) {
          localStorage.setItem('token', response.data.token);
        }
        
        return { 
          success: true, 
          data: response.data.user 
        };
      }
      
      console.log('[AuthContext] 登录失败，无用户数据');
      return { 
        success: false, 
        message: '登录失败，请检查用户名和密码' 
      };
    } catch (error) {
      console.error('[AuthContext] 登录失败:', error);
      return {
        success: false,
        message: error.response?.data?.message || '网络错误，请稍后重试',
      };
    }
  };

  /**
   * 登出方法
   */
  const logout = () => {
    console.log('[AuthContext] 用户登出');
    
    // 清除用户状态
    setUser(null);
    
    // 清除localStorage
    localStorage.removeItem('user');
    localStorage.removeItem('token');
    
    // 重定向到登录页
    router.push('/auth/login');
  };

  // 提供给Context的值
  const contextValue = {
    user,
    isAuthenticated: !!user,
    isLoading,
    login,
    logout
  };

  return (
    <AuthContext.Provider value={contextValue}>
      {children}
    </AuthContext.Provider>
  );
};

export default AuthContext;